/*
 * Títutlo: StackList.java
 * Autor: Diego Serafín Martínez García
 * Descripción: Estructura de Datos, "Stack" implementada con Listas.
 * 
 * Universidad Autónoma de Yucatán
 * 
 */

package aerodromo.util.estructurasDatos.pila;

import aerodromo.util.estructurasDatos.lista.ListNode;
import aerodromo.util.estructurasDatos.lista.SimpleList;

/**
 *
 * @author Diego Martínez
 */
public class StackList<T> implements Pila<T>{

    private SimpleList<T> simpleList;
    private int cantidad;

   public StackList(){
      simpleList = new SimpleList<T>();
   }

    @Override
    public int size() {
        return simpleList.size();
    }

    @Override
    public boolean isEmpty() {
       return simpleList.isEmpty();
    }

    public void push(T o) {
       simpleList.insertAtFirst(o);
       cantidad++;
    }

    public T pop() throws EmptyPilaException {
      try{
        T objeto = (T)simpleList.removeFromFisrt();
        cantidad--;
        return objeto;
      }
      catch(Exception e){
        throw new EmptyPilaException();
      }
    }

    public T top() throws EmptyPilaException {
       if (isEmpty())
         throw new EmptyPilaException();
       else
         {
          return (T)simpleList.getFirstNode().getData();
         }
    }

    @Override
    public T obtenerIndice(int indice) {
ListNode<T> current = (ListNode<T>)simpleList.getLastNode();
        while(indice!=0){
            current= current.getSiguiente();
            indice--;
        }
        return (T) current;    }

}
